package com.shardings.hit;

import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.sharding.api.sharding.hint.HintShardingAlgorithm;
import org.apache.shardingsphere.sharding.api.sharding.hint.HintShardingValue;

import java.util.ArrayList;
import java.util.Collection;

/**
 * @author: LCG
 * @date: 2022-11-16 13:38:07
 * @description:  HINT强制路由算法实现  分表
 **/
@Slf4j
public class MyHintShardingAlgorithmTb implements HintShardingAlgorithm<Long> {
    /**
     * @author: LCG
     * @date: 2022-11-16 22:51:10
     * @description:
     * collection   这个里边的值是 已有的数据库对应的某一个逻辑表的所有真实的子表
     * hintShardingValue  这里边的数据是 HintManger.addTableShardingValue 设置的数据库分片的下标
     * 比如：collection:[d0,d1,d2]  HintManger.addTableShardingValue('m_user',0L)
     * 意思是使用0这个数据库分片  也就是用对应该数据库逻辑表m_user 对应的真实表 m_user_0
     */
    @Override
    public Collection<String> doSharding(Collection<String> collection, HintShardingValue<Long> hintShardingValue) {
        Collection<Long> values = hintShardingValue.getValues();
        Collection<String> tables=new ArrayList<>();
        for (Long value : values) {
            collection.stream().forEach(str->{
                if(str.endsWith(value.toString())){
                    tables.add(str);
                }
            });
        }
        return tables;
    }


    @Override
    public void init() {

    }

    @Override
    public String getType() {
        return "MY-HINT";
    }
}
